package com.novel.service;

import com.novel.entiy.Chapter;
import com.novel.entiy.Classify;
import com.novel.entiy.Novel;
import com.novel.entiy.dto.*;
import com.novel.entiy.vo.*;
import com.novel.utils.PageResult;

import java.util.List;

/**
 * @author tanghao
 * @date 2022/4/7
 */
public interface NovelService {

    /**
     * 新建小说
     *
     * @param novelDTO 参数
     */
    void addNovel(NovelDTO novelDTO);

    /**
     * 编辑小说
     *
     * @param novelDTO 参数
     */
    void editNovel(NovelDTO novelDTO);

    /**
     * 删除小说
     *
     * @param id 小说id
     */
    void delNovel(Long id);

    /**
     * 新增章节
     *
     * @param chapterDTO 参数
     */
    void addChapter(ChapterDTO chapterDTO);

    /**
     * 编辑章节
     *
     * @param chapterDTO 章节信息
     */
    void editChapter(ChapterDTO chapterDTO);

    /**
     * 章节信息变化带动小说信息变化
     *
     * @param chapter 章节
     */
    void updateNovel(Chapter chapter);

    /**
     * 发布章节
     *
     * @param id 章节id
     */
    void publishChapter(Long id);

    /**
     * 读
     *
     * @param readDTO 参数
     * @return 结果
     */
    ReadVO read(ReadDTO readDTO);

    /**
     * 收费
     *
     * @param userId 用户id
     * @param amount 金额
     */
    void charge(Long userId, Long amount);

    /**
     * 加入书架
     *
     * @param novelId 小说id
     */
    void subscribe(Long novelId);

    /**
     * 移除书架
     *
     * @param novelId 小说id
     */
    void cancelSubscribe(Long novelId);

    /**
     * 小说阅读数增加
     *
     * @param readDTO 参数
     */
    void readNum(ReadDTO readDTO);

    /**
     * 获取全部分类
     *
     * @return 分类
     */
    List<Classify> getAllClassify();

    /**
     * 首页-获取小说列表
     *
     * @param novelPageDTO 参数
     * @return 小说
     */
    PageResult<Novel> getNovelList(NovelPageDTO novelPageDTO);

    /**
     * 获取小说信息
     *
     * @param id 小说id
     * @return 小说信息
     */
    NovelVO getNovelInfo(Long id);


    /**
     * 评分
     *
     * @param novelId 小说id
     * @param score   分数
     */
    void score(Long novelId, String score);


    /**
     * 获取小说所有章节草稿
     *
     * @param novelId 小说id
     * @return 草稿
     */
    List<ChapterVO> getAllChapterDraft(Long novelId);

    /**
     * 我的小说-作者
     *
     * @param pageParams 参数
     * @return 结果
     */
    PageResult<Novel> getMyBookList(PageParams pageParams);

    /**
     * 我的书架
     *
     * @param pageParams 参数
     * @return 结果
     */
    PageResult<BookSelfVO> getMyBookSelf(PageParams pageParams);

    /**
     * 是否存在草稿
     *
     * @param novelId 小说id
     * @return 结果
     */
    boolean existDraft(Long novelId);

    /**
     * 章节列表-分页
     *
     * @param chapterPageDTO 参数
     * @return 结果
     */
    PageResult<ChapterVO> chapterList(ChapterPageDTO chapterPageDTO);

    /**
     * 获取所有的章节
     *
     * @param novelId 小说id
     * @param sort    排序字段
     * @return 结果
     */
    List<ChapterVO> getAllChapter(Long novelId, Integer sort);

    /**
     * 章节详情
     *
     * @param chapterId 章节id
     * @return 结果
     */
    Chapter getChapter(Long chapterId);

    /**
     * 设置收费章节
     *
     * @param charge 参数
     */
    void setCharge(ChargeDTO charge);

    /**
     * 搜索
     *
     * @param query 搜索条件
     * @return 搜索结果
     */
    List<SearchVO> search(String query);

    /**
     * 完结小说
     *
     * @param novelId 小说id
     */
    void finish(Long novelId);
}
